Electronic devices or systems are often designed with highly integrated hardware and software components to improve performance and reduce cost and size. Electronic systems typically have a variety of hardware components such as one or more central processing units (CPUs), static random access memory (SRAM) modules, dynamic random access memory (DRAM) modules, memory management units, caches, buses, modems, storage devices, or other components. Electronic systems also typically have a variety of software components such as application programs, operating systems, and device drivers that interact with the multiple hardware components to provide desired functionality. One electronic system is a system-on-a-chip (SoC) that holds all of the hardware and electronic circuitry for a complete system, including on-chip memory, the CPU, peripheral interfaces, I/O logic control, data converters, and other components to comprise a complete computer system.
Integrated electronic systems are becoming more and more ubiquitous in our daily lives, being used in products ranging from consumer devices such as digital cameras and cellular phones to computer systems, automobiles, communications systems, etc. As the use of integrated electronic systems becomes more widespread, there is increasing desire to improve the performance and reduce the size and cost of the designs. The design and verification process, however, can be very time-consuming and resource-intensive, as components from multiple manufacturers are typically integrated into one integrated system.
Designs of integrated electronic systems including both hardware and software are typically validated during the design so that problems are found before completion of the design and manufacture of a product, as redesigns become more expensive in time and resources as the design gets closer to manufacture. One particular difficulty in designing integrated electronic systems results from the simultaneous design of hardware and software systems. Due to increased time to market pressures, hardware and software are usually developed in parallel. The hardware design is validated using a hardware simulator or emulator while the software is validated using an instruction set simulator on a general purpose computer. The instruction set simulator must rely on simulations of the hardware performance as both designs are being performed simultaneously, resulting in difficulties in accurately integrating the software with the hardware. Integration of the hardware and software designs is made more difficult by the uncertainties of the other designs and because of the simultaneous design. Moreover, many components are off-the-shelf (OTS) designs and are thus more difficult to tightly integrate with other components.
The difficulties arising from integrating hardware and software designs during development are exacerbated by intellectual property (IP) ownership issues. In many cases, each component may be created by a different company which retains ownership to its design, making it more difficult to fully integrate the design between components. Further, each component has its own characteristics and is designed by different people who may spread across two or more companies. The distribution of knowledge about how each component is designed increases the complexity of integrating the components. The problem of IP ownership can be solved to a large extent by licensing or cross-licensing between companies, providing some integration flexibility. Companies may solve the problem of distributed expertise by broadening the architecture and design capacity of the company.
The interconnect between components is typically standardized and the interface devices are typically pre-made and ready to use OTS products, resulting in no standard definition of the internal bus architecture for internal links between blocks inside chips. The lack of a standard definition of interconnects between components makes simulation and validation more difficult, particularly when trying to synchronize timing cycles between hardware and software components. Previous solutions ran hardware and software emulation or simulation separately (in a process known as co-simulation), waiting until the hardware (i.e., chip) was ready to be put under a real testing environment and running the software under that environment. Such a solution results in loose integration at best and results in timing problems resulting from cycle synchronization issues.
There is, therefore, a need for an effective mechanism for improving simulation of integrated hardware and software systems. There is an even greater need for such a system when timing cycles of hardware and software components to be integrated or synchronized.